Hard link
A számítástechnikában a hard link, microsoftos terminológiában rögzített hivatkozás egy hivatkozás vagy mutató egy adattároló eszközön elérhető adatra. A legtöbb fájlrendszerben az elnevezett fájlok hard linkek. A fájl neve csak egy címke, amely az operációs rendszer számára egy adatra utal. Ennek megfelelően ugyanazt az adatot több néven is jelölhetjük. Ez azt is okozza, hogy az adaton végrehajtott változtatások megmaradnak akkor is, ha a fájl új nevet kap a későbbiekben. Hard linkkel csak azonos fájlrendszerben létező adatra lehet hivatkozni.
Unix alatt hard link a link() rendszerhívás vagy az ln utasítás segítségével hozható létre.
Windows alatt a NTFSben az fsutil hardlink [1] (csak Windows XP), az mklink utasítással [2][halott link] (Windows Vista) vagy például a FAR Managerrel [3] hard linkelhetünk.
Az unlinking megszünteti a hard linket, vagyis szétválasztja a nevet az adattól. Az adat addig marad elérhető, amíg legalább egy link mutat rá, amikor minden linket eltávolítottunk az adat helye felszabadul. Az úgynevezett undeletinggel újra létrehozhatjuk a kapcsolatot, amit megszüntettünk. (Ez nem érhető el minden rendszeren, és gyakran nem elég megbízható.)
A hivatkozásszámláló
[szerkesztés]A legtöbb hard linkeket támogató fájlrendszer hivatkozás számlálókat használ. Minden fizikai adattal együtt egy egész típusú érték kerül tárolásra, ami az adatra mutató linkek számával egyenlő. Új link létrehozásakor az érték eggyel nő, link törlésekor pedig eggyel csökken. Ez segíti a felhasználót az adatvesztés megakadályozásában; emellett ez a legegyszerűbb módja, hogy a fájlrendszer egy területének a telítettségét kövessük: a nulla érték üres helyet, míg a nullától különböző értékek használatban lévő területet jelölnek.
Unix operációs rendszer alatt egy fájl vagy könyvtár hivatkozásainak száma a stat() vagy fstat() rendszerhívásokkal kérdezhető le. A visszaadott stat struktúra st_nlink mezője tartalmazza a keresett értéket. Ennek ellenére azok a programozási nyelvek, amelyek hivatkozás számlálót használnak, csak ritkán fedik fel a számláló értékét az épp futó program számára.
Példa
[szerkesztés]Az ábrán két fájl, LINK A.TXT és LINK B.TXT látható. Mindkét fájl ugyanarra a fizikai adatra mutat.
Ha a LINK A.TXT által hivatkozott fájlt megnyitjuk egy szövegszerkesztőben, módosítjuk majd elmentjük, akkor a változások a LINK B.TXT fájlban is láthatóvá válnak. Ugyanez lenne a helyzet, ha a fájlt LINK B.TXT-ként, vagy bármilyen, arra az adatra mutató fájlként módosítottuk volna.
További linkek is létrehozhatók az adathoz: a felhasználónak csak meg kell adnia egy létező link nevét - az operációs rendszer ez alapján már meg tudja állapítani a lemezen található adat helyét.
Ha eltávolítunk egy linket (például UNIX alatt az rm paranccsal), az adat továbbra is hozzáférhető marad a rá mutató, még létező linkeken keresztül. Ha az összes link törlésre kerül és egy folyamat sem tartja nyitva a fájlt, akkor a fájl által elfoglalt terület szabaddá válik, így azt később más fájlok vehetik használatba. Ez a megoldás lehetővé teszi használatban lévő fájlok törlését anélkül, hogy ez megzavarná a fájlt használó folyamatot. Ez nem lehetséges olyan fájlrendszereken, amik egy-az-egyhez kapcsolatot tartanak fönn a fájlnevek és az adatok között.
A hard linkek korlátozásai
[szerkesztés]Bizonyos esetekben a hard linkek nem bizonyulnak megfelelő megoldásnak. Mivel a link gyakorlatilag megegyezik az adattal, amire mutat, nehézkessé válik olyan parancsok kiadása, mint „listázd ki rekurzívan egy adott könyvtár teljes tartalmát, de hagyd figyelmen kívül a linkeket”. A legtöbb modern operációs rendszer tiltja a könyvtárakra mutató hard linkeket, megakadályozva ezzel az önmagába visszatérő végtelen rekurziót. (Fontos kivétel ez alól a Mac OS X 10.5 Leopard.) A hard linkek egy másik hátránya, hogy a linkeknek ugyanazon a fájlrendszeren kell elhelyezkedniük, míg manapság a nagy számítógépes rendszerek több fájlrendszert is alkalmaznak.
További információk
[szerkesztés]- (angol) On line manual page of ln
- (angol) Creating hard links in Windows XP Professional using fsutil
- (angol) CreateHardLink WinAPI function – creating hard links programmatically
- (angol) Utility to create hard links, junctions and symbolic links in Windows NT/2000/XP/Vista
- (angol) Xplorer2 File manager that includes (among many others) a link-creation function in NT/2000/XP/Vista